package com.ksm.domain.entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "T_DOCUMENT")
public class Document extends GenericEntity {

	/**
	 * 
	 */

	public static String COLUMN_INTERLOCUTEUR = "interlocuteur";
	public static String COLUMN_DOCUMENT_TYPE = "documentType";

	private static final long serialVersionUID = 7919984012419968791L;

	private String commentaire;
	private Date dateValeur;
	private DocumentType documentType;
	private String interlocuteur;
	private Double montant;
	private Taux tauxTva;

	private Set<Justificatif> justificatifs = new HashSet<Justificatif>(0);

	@Column(name = "COMMENTAIRE", length = 500)
	public String getCommentaire() {
		return commentaire;
	}

	public void setCommentaire(String commentaire) {
		this.commentaire = commentaire;
	}

	@Column(name = "DATE_VALEUR")
	@Temporal(value = TemporalType.DATE)
	public Date getDateValeur() {
		return dateValeur;
	}

	public void setDateValeur(Date dateValeur) {
		this.dateValeur = dateValeur;
	}

	@ManyToOne(cascade = { CascadeType.ALL })
	@JoinColumn(name = "DOCUMENT_TYPE_ID")
	public DocumentType getDocumentType() {
		return documentType;
	}

	public void setDocumentType(DocumentType documentType) {
		this.documentType = documentType;
	}

	@Column(name = "INTERLOCUTEUR")
	public String getInterlocuteur() {
		return interlocuteur;
	}

	public void setInterlocuteur(String interlocuteur) {
		this.interlocuteur = interlocuteur;
	}

	@Column(name = "MONTANT")
	public Double getMontant() {
		return montant;
	}

	public void setMontant(Double montant) {
		this.montant = montant;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "TAUX_TVA_ID", nullable = false)
	public Taux getTauxTva() {
		return tauxTva;
	}

	public void setTauxTva(Taux tauxTva) {
		this.tauxTva = tauxTva;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "document", cascade = { CascadeType.ALL })
	public Set<Justificatif> getJustificatifs() {
		return justificatifs;
	}

	public void setJustificatifs(Set<Justificatif> justificatifs) {
		this.justificatifs = justificatifs;
	}

	public void addJustificatif(Justificatif justificatif) {
		this.justificatifs.add(justificatif);
	}

}
